// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.search.viewholder;

import android.content.Context;
import android.text.SpannableStringBuilder;
import android.util.Log;
import android.view.View;

import com.bumptech.glide.Glide;
import com.eva.android.widget.WidgetUtils;
import com.x52im.rbchat.R;
import com.x52im.rbchat.cache.ImageCacheLoader;
import com.x52im.rainbowchat.http.logic.dto.GroupEntity;
import com.x52im.rbchat.logic.search.content.GroupsContent;
import com.x52im.rbchat.logic.search.model.GroupContentDTO;

import androidx.fragment.app.Fragment;

/**
 * 群聊item的viewHolder对象实现类。
 *
 * @author JackJiang
 * @since 8.2
 */
public class GroupViewHolder extends AbstractViewHolder<GroupContentDTO> {

    public GroupViewHolder(Fragment fragment, View itemView) {
        super(fragment, itemView);
    }

    /**
     * 用于RecycleView的adapter中的onBindViewHolder方法。
     *
     * @param keyword           本次搜索的关键字（用于ui显示时的高亮显示）
     * @param groupContentDTO 列表item对应的数据对象引用
     * @param showCatlog        是否显示item上方的标题文本（true表示显示，否则不显示）
     */
    @Override
    public void onBind(String keyword, GroupContentDTO groupContentDTO, boolean showCatlog) {
        Context c = this.fragment.getContext();
        GroupEntity g = groupContentDTO.getGroupInfo();
        if (g == null){
            Log.w(GroupViewHolder.class.getSimpleName(), "GroupViewHolder中无效的GroupEntity，g=null!");
            return;
        }

        // 设置catlog的可见性
        itemView.findViewById(R.id.search_result_item_categoryLL).setVisibility(showCatlog?View.VISIBLE:View.GONE);
        tvCatlog.setText(showCatlog? GroupsContent.CATLOG:null);

        // 以下代码，解决Glide在RecycleView中图片错位或重复显示问题
        Glide.with(c).clear(ivAvatar);// 解决方法2
        // clear完成后设置默认占位图，确保图片显示不出现Glide导致的错位问题
        ivAvatar.setImageResource(R.drawable.groupchat_groups_icon_default_r21px);
        // 开始加载群头像
        if(g.getG_id() != null) {
            // 加载群头像
            ImageCacheLoader.loadGroupImgWithGlide(Glide.with(c), g.getG_id()
                    , ivAvatar, 7 , false
                    , R.drawable.groupchat_groups_icon_default_r21px);// 圆角单位是dp，（相当于xxhdpi下的21像素）
        }

        // 设置群名称中关键字的高亮显示并在ui上显示出来
        String gname = g.getG_name();
        SpannableStringBuilder ssb = WidgetUtils.coloredStringForSearch(c, gname, keyword, R.color.common_list_light_red_for_text);
        tvName.setText(ssb != null? ssb: gname);

        // 默认设置描述信息不显示
        tvMoreDesc.setVisibility(View.GONE);
        // 显示描述信息
        String desc = getDesc(groupContentDTO.getMachedType(), keyword);
        tvMoreDesc.setText(desc != null ? desc : "");
    }

    /**
     * 根据搜索匹配类型返回对应的描述信息。
     *
     * @param matchedType 搜索匹配类型
     * @param keyword 搜索关键字
     * @return 返回null或正常的描述信息
     */
    private String getDesc(int matchedType, String keyword){
        String desc = null;
        // 根据搜索匹配类型显示相应的描述信息
        switch (matchedType) {
            case GroupContentDTO.MACHED_TYPE_GNAME:
                break;
            case GroupContentDTO.MACHED_TYPE_MNAME: {
                tvMoreDesc.setVisibility(View.VISIBLE);
                desc = "包含: " + keyword;
                break;
            }
            case GroupContentDTO.MACHED_TYPE_ALL: {
                tvMoreDesc.setVisibility(View.VISIBLE);
                desc = "群名称和群成员都包含: " + keyword;
                break;
            }
            default:
                break;
        }
        return desc;
    }
}
